pub fn dp_rec_mc(amount: u32) -> u32 {
    // 可用纸币面值
    let denominations = [1, 2, 5, 10, 20, 30, 50, 100];
    // 初始化 dp 数组，dp[i] 表示金额 i 所需的最少纸币数
    let mut dp = vec![u32::MAX; (amount + 1) as usize];
    dp[0] = 0; // 金额为 0 时不需要纸币

    // 计算每个金额的最小纸币数
    for i in 1..=amount as usize {
        for &denom in &denominations {
            if i >= denom as usize {
                dp[i] = dp[i].min(dp[i - denom as usize] + 1);
            }
        }
    }

    // 返回最终金额的最小纸币数
    dp[amount as usize]
}
